// 类型推论

export let x = 1

x = 1231

// x = true


const o = {
	name: '张安',
	age: 18,
	sex: ''
}

o.sex = '男'

// 类型保护

function fn(x: number | string): number {
	if (typeof x === 'number') {
		return x
	} else {
		return +x
	}
}

// 类型断言
const str: unknown = '1231';

const result = (str as number) * 1


document.addEventListener('click', e => {
	// 类型断言
	const tar = e.target as HTMLElement

	if (tar.className === 'delete') {
		console.log('删除！！！！！！！！！')
	}
})


// 高级类型
// 交叉类型（Intersection Types）: 交叉类型是将多个类型合并为一个类型
// 联合类型（Union Types）: 联合类型表示一个值可以是几种类型之一
interface P {
	name: string
	age: number
}

interface PP {
	sex: string
}

const p: P & PP = {
	name: '张胜男',
	age: 18,
	sex: '男'
}

const p1: P | PP = {
	// name: '张胜男',
	// age: 18,
	sex: '男'
}

console.log(p, p1);


// 类型别名
type n = number
const num: n = 1231